package com.xiongwei.dateAndTime;

import jdk.swing.interop.SwingInterOpUtils;

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * Date对象有几个严重的问题:它不能转换时区,除了toGMTString()可以按GMT+0:00输出外,
 * Date总是以当前计算机系统时区为基础进行输出,
 * 另外很难对日期进行计算
 *
 * TimeZone和Date相比,它提供了时区转换的功能
 *
 * @author XiongWei
 * @date 2021/1/29
 */
public class DateAndCalendar {

    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date.getYear());
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.get(Calendar.YEAR));

        var sdf = new SimpleDateFormat("E MMM dd, yyyy");
        System.out.println(sdf.format(date));

        System.out.println("______________________________");

        TimeZone aDefault = TimeZone.getDefault();
        TimeZone timeZone = TimeZone.getTimeZone("GMT+08:00");
        TimeZone timeZone2 = TimeZone.getTimeZone("America/New_York");
        System.out.println(aDefault.getID());
        System.out.println(timeZone.getID());
        System.out.println(timeZone2.getID());
//        String[] availableIDs = TimeZone.getAvailableIDs();
//        for (String availableID : availableIDs) {
//            System.out.println(availableID);
//        }

        /*
        将北京时间2019-11-20 8:15:00转换为纽约时间
        1.清楚calendar所有字段
        2.设定指定时区
        3.设定日期和时间
        4.创建SimpleDateFormat并设定目标时区
        5.格式化获取的Date对象(Date对象无时区信息,时区信息存储在SimpleDateFormat中)
         */
        Calendar c = Calendar.getInstance();
        c.clear();
        c.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));
        c.set(2019, 10, 20, 8, 15, 0);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        simpleDateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));
        String transDate = simpleDateFormat.format(c.getTime());
        System.out.println(transDate);
    }
}
